/**
 ceil(x) 向上取整。

 floor(x) 即向下取整。

 round(x)	四舍五入。

 random()	返回 0 ~ 1 之间的随机数，包含 0 不包含 1。


 parseInt(string, radix)函数可解析一个字符串，并返回一个整数。
 string	必需。要被解析的字符串。
 radix可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
 如果省略参数radix或其值为 0，则数字将以 10 为基础来解析
 */


Math.ceil(Math.random()*10);     // 获取从 1 到 10 的随机整数，取 0 的概率极小。

Math.round(Math.random());       // 可均衡获取 0 到 1 的随机整数。

Math.floor(Math.random()*10);    // 可均衡获取 0 到 9 的随机整数。
parseInt(Math.random()*10);    // 可均衡获取 0 到 9 的随机整数。

Math.round(Math.random()*10);    // 基本均衡获取 0 到 10 的随机整数，其中获取最小值 0 和最大值 10 的几率少一半。



/**
 生成 [n,m] 的随机整数,n<=m
 */

function randomNum(minNum,maxNum){
    let args = arguments
    if(!args.length){return null}
    if(args[0] > args[1]){
        return null
    }
    return Math.floor(Math.random()*(args[1]-args[0]+1)+args[0]);
}





//依次生成n个属于[nim,max]不重复随机整数,0<=n<=max-min+1
//len 不传或者为零，表示随机打乱[nim,max]整数顺序
//maxNum,len不传，表示依次生成nimNum个不重复在 <=nimNum 之间的随机整数

function randomNoRepeatNum(minNum,maxNum,length){
    var result = [];
    var hash = {}
    var len = 0;
    function randomNum(minN,maxN,len){
        while(result.length<len){
            const item = Math.floor(Math.random()*(maxN-minN+1)+minN);
            if(!hash[item]){
                hash[item] = 'set';
                result.push(item)
            }
        }
    }
    switch(arguments.length){
        case 1:{
            len = minNum +1
            randomNum(0,minNum,len);
            return result;
        }break;
        case 2:{
            len = maxNum - minNum +1
            randomNum(minNum,maxNum,len);
            return result;
        }break;
        case 3:{
            len = length;
            if(len>(maxNum - minNum+1)) len = maxNum - minNum +1;
            randomNum(minNum,maxNum,len);
            return result;
        }break;
        default:
            return 0;
            break;
    }

}


//36选择7
console.log(randomNoRepeatNum(0,36,7));